package com.apo1o.cmscore.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.Map;

/**
 * @Auther: Apo1o.
 * @Date: 2023/11/16-11-16-14:16
 * @Description： com.apo1o.cmscore.util
 */
@Component
@RequiredArgsConstructor
public class JWTUtil {


        //签名秘钥 可以自定义但是不能告诉别人
        private static String signKey = "Apo1o";
        //过期时间(一天)  单位为毫秒
        private static Long expire = 60 * 60 * 24 * 1000L;

        /**
         * 生成JWT令牌
         * @param claims JWT第二部分负载 payload 中存储的内容
         * @return
         */
        public static String generateJwt(Map<String, Object> claims){
            String jwt = Jwts.builder()
                    //自定义信息（有效载荷）
                    .addClaims(claims)
                    //签名算法（头部）
                    .signWith(SignatureAlgorithm.HS256, signKey)
                    //过期时间
                    .setExpiration(new Date(System.currentTimeMillis() + expire))
                    .compact();
            return jwt;
        }


        /**
         * 解析JWT令牌
         * @param jwt JWT令牌
         * @return JWT第二部分负载 payload 中存储的内容
         */
        public static Claims parseJWT(String jwt){
            Claims claims = Jwts.parser()
                    //指定签名秘钥
                    .setSigningKey(signKey)
                    //指定JWT令牌
                    .parseClaimsJws(jwt)
                    .getBody();
            return claims;
        }
    /**
     * 获取用户ID
     * @param token
     * @return
     */
    public static String getUserId(String token){
        Claims claims = parseJWT(token);
        String id = String.valueOf(claims.get("userId")) ;
        return id;
    }

    }

